home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / otoko / source.lzh / DAT / disent.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-14  |  2.7 KB  |  155 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5.  
  6. #include "../names.h"
  7.  
  8. #define ENEMY_MUSIC    250
  9. #define ENEMY_MUSIC_FADEOUT    251
  10. #define ENEMY_NON    253
  11. #define ENEMY_START    254
  12. #define ENEMY_END    255
  13.  
  14.  
  15. void usage (void)
  16. {
  17.     printf ("男弾の stageXX.dat を .s 形式に変換する disent.x ver1.00\n"
  18.         "        programmed by Mitsuky <FreeSoftware>\n"
  19.         "使用法 : disent [option] ファイル名...\n"
  20. #if    0
  21.         "[option]\n"
  22.         "    -X : \n"
  23.         "ファイル名は複数指定できます\n"
  24. #endif
  25.     );
  26. }
  27.  
  28.  
  29.  
  30. int disent (char *fname)
  31. {
  32.     FILE *fp;
  33.     int i;
  34.     int file_size;
  35.     void *dat;
  36.     char fname_root[256], fname2[256];
  37.     signed short *p;
  38.  
  39.     if ((fp = fopen (fname, "rb")) == NULL) {
  40.         printf ("ファイル %s が読み込めません\n", fname);
  41.         return (-1);
  42.     }
  43.     file_size = filelength (fileno (fp));
  44.     if ((int) (dat = malloc (file_size)) < 0) {
  45.         printf ("メモリが足りません\n");
  46.         return (-1);
  47.     }
  48.     fread (dat, 1, file_size, fp);
  49.     fclose (fp);
  50.  
  51.     /* 拡張子を .s に */
  52.     {
  53.         char *s, *d;
  54.         s = fname;
  55.         d = fname_root;
  56.         while (*s != '.')
  57.             *d++ = *s++;
  58.         *d = '\0';
  59.         strcpy (fname2, fname_root);
  60.         strcat (fname2, ".s");
  61.     }
  62.     if ((fp = fopen (fname2, "wb")) == NULL) {
  63.         printf ("ファイル %s が書き込めません\n", fname2);
  64.         return (-1);
  65.     }
  66.     fprintf (fp, "*    %s\n"
  67.          "\n"
  68.          "    .include    names.inc\n"
  69.          "\n"
  70.          "    .data\n"
  71.          "    .even\n"
  72.          "%s:\n"
  73.          "        * type,x,y,arg,ctrl,time\n",
  74.          fname2, fname_root);
  75.  
  76.     for (i = 0, p = dat; i < file_size / 12; i++) {
  77.         signed short h;
  78.         switch (h = *p++) {
  79.         case ENEMY_MUSIC:
  80.             fprintf (fp, "    .dc.w    ENEMY_MUSIC,");
  81.             break;
  82.         case ENEMY_MUSIC_FADEOUT:
  83.             fprintf (fp, "    .dc.w    ENEMY_MUSIC_FADEOUT,");
  84.             break;
  85.         case ENEMY_NON:
  86.             fprintf (fp, "    .dc.w    ENEMY_NON,");
  87.             break;
  88.         case ENEMY_START:
  89.             fprintf (fp, "    .dc.w    ENEMY_START,");
  90.             break;
  91.         case ENEMY_END:
  92.             fprintf (fp, "    .dc.w    ENEMY_END,");
  93.             break;
  94.         default:
  95.             fprintf (fp, "    .dc.w    %s,", enemy_name[h]);
  96.             break;
  97.         }
  98.         fprintf (fp, "%d,", *p++);
  99.         fprintf (fp, "%d,", *p++);
  100.         fprintf (fp, "%d,", *p++);
  101.         fprintf (fp, "%d,", *p++);
  102.         fprintf (fp, "%d", *p++);
  103.  
  104.         if ((i % 10) == 0)
  105.             fprintf (fp, "        * %d\n", i);
  106.         else
  107.             fprintf (fp, "\n");
  108.     }
  109.     fclose (fp);
  110.  
  111.     return (0);
  112. }
  113.  
  114.  
  115.  
  116. int main (int argc, char *argv[])
  117. {
  118.     int i;
  119.     int slash_flag = 0;
  120.     int fname_found_flag = 0;    /* ファイル名が1つでもあったか */
  121.  
  122.     {
  123.         char *temp;
  124.  
  125.         temp = getenv ("SLASH");
  126.         if ((temp != NULL) && (*temp == '/')) {
  127.             slash_flag = 1;
  128.         }
  129.     }
  130.  
  131.     for (i = 1; i < argc; i++) {
  132.         if (('-' == *argv[i]) || ((slash_flag == 0) && ('/' == *argv[i]))) {
  133.             switch (*(argv[i] + 1)) {
  134.  
  135.             case 's':
  136.             case 'S':
  137.                 break;
  138.  
  139.             default:
  140.                 usage ();
  141.                 return (-1);
  142.             }
  143.         } else {
  144.             disent (argv[i]);
  145.             fname_found_flag = 1;
  146.         }
  147.     }
  148.  
  149.     if (fname_found_flag == 0) {
  150.         usage ();
  151.         return (-1);
  152.     }
  153.     return (0);
  154. }
  155.